perm filename TEST3[2,DBL] blob
sn#016210 filedate 1972-12-17 generic text, type T, neo UTF8
00100 BEGIN
64200 EXPR REC2(FN,A,N,RELATEDF);
64300 BEGIN NEW I,II,I1,I2,KK,JJ1,JJ2;
64400 EE1←NIL;
64500 EE2 ← NIL;
64600 L1← NIL;
64700 L2 ← NIL;
64800 E←NIL;
64900 MA←T;
65000 MN←T;
65100 MAL←T;
65200 MA2 ←T;
65300 MN2←T;
65400 MAL2←T;
65500 E1←NIL;
65600 E2←NIL;
65700 EXAMPLE[NEX+2,1]←L;
65800 FOR NEW X←1 TO NEX+1 DO BEGIN
65900 E1← EXAMPLE[X+1,1,1];
66000 E2← EXAMPLE[X+1,1,2];
66100 MA← MA AND ATOM(E1);
66200 MA2← MA2 AND ATOM(E2);
66300 MN ← MN AND NUMBER(E1);
66400 MN2 ← MN2 AND NUMBER(E2);
66500 MAL ← MAL AND ANYLIST(E1);
66600 MAL2 ← MAL2 AND ANYLIST(E2);
66700 END;
66800 I← '(ANY ANY);
66900 IF MAL THEN I[1] ← 'ANYLIST;
67000 IF MAL2 THEN I[2] ← 'ANYLIST;
67100 IF MA THEN I[1] ← 'ATOM;
67200 IF MA2 THEN I[2] ← 'ATOM;
67300 IF MN THEN I[1] ← 'NUMBER;
67400 IF MN2 THEN I[2] ← 'NUMBER;
67500 PUTPROP ('FN2, I, 'TARGS);
67600 PUTPROP ('FN2, 2, 'NARGS);
67700 PUTPROP ('FN2, 'ANY, 'TRES);
67800 IHOLD← I;
67900 PRINTSTR '"DO YOU KNOW THE TYPE OF ARGUMENTS FOR THE FN?
68000 MY GUESS IS";
68100 PRINC (IHOLD);
68200 PRINTSTR '" ANSWER N MEANS GUESS IS OK,
68300 ANSWER Y MEANS YOU WANT TO CHANGE MY GUESS ...";
68400 I←READ();
68500 IF I='Y THEN BEGIN
68600 PRINTSTR '"TYPE IN TWO OF THE WORDS:
68700 ANY ANYLIST NUMBER LISTP
68800 ( LISTP MEANS A NONNULL LIST)...";
68900 I ← READ();
69000 II ← READ();
69100 IHOLD ← <I,II>;
69200 PUTPROP('FN2, IHOLD, 'TARGS);
69300 END;
69400 FOR NEW K←1 TO 19 DO
69500 ORD[K]←INTERSECTION(RELATEDF[1]@RELATEDF[2]@<'FN2>
69600 @RELATEDF[3]@RELATEDF[4], ORDER2[K]);
69700 FOR NEW K←1 TO 19 DO
69800 ORD[K] ← RANK(K,ORD);
69900 PRINTSTR '"DO YOU WANT TO CUT DOWN THE POSSIBILITIES?";
70000 I←READ();
70100 IF I='Y THEN FOR NEW X←1 TO 19 DO
70200 BEGIN
70300 PRINT <'ORD,X,ORD[X]>;
70400 PRINTSTR '"NOW RETYPE THIS SECTION OF ORD:";
70500 I←READ();
70600 IF NOT(I='S) THEN ORD[X]←I;
70700 END;
70800 IF C1='UNKNOWN THEN C1=T;
70900 IF C3='UNKNOWN THEN C3=T;
71000 I←NIL; II←NIL;
71100 LIMINF←LIMINFBASE;
71200 TAGF1 ← F1;
71300 TAGF7 ← F7;
71400 FOR NEW T2 ← 1 TO LENGTH(ORD[2]) DO BEGIN
71500 F2 ← ORD[2,T2];
71600 IF GREATERP(MSGLEVEL,0) THEN
71700 PRINT <2,'T2,T2,'F2,F2>;
71800 IF GREATERP(MSGLEVEL,49) THEN
71900 PRINT<'L,L,'RELATEDFUNCTIONS,RELATEDF,'ORD,ORD>;
72000 IF FOR NEW X← 2 TO NEX+1; AND
72100 MAT(EXAMPLE[X,1],F2) THEN
72200 FOR NEW T3 ← 1 TO LENGTH(ORD[3]) DO BEGIN
72300 F3←ORD[3,T3];
72400 IF GREATERP(MSGLEVEL,1) THEN
72500 PRINT <3,'T3,T3,'F3,F3>;
72600 IF FOR NEW X←2 TO NEX+1; AND
72700 MAT3(EXAMPLE[X,1],F3) THEN
72800 FOR NEW T1←1 TO LENGTH(ORD[1]) DO BEGIN
72900 F1← ORD[1,T1];
73000 IF GREATERP(MSGLEVEL,2) THEN PRINT <1,'T1,T1,'F1,F1>;
73100 IF FOR NEW X←2 TO NEX+1; AND
73200 MAT2(EXAMPLE[X,1],F1,F2,F3) AND
73300 (TAGF1 OR GOODEX=NIL OR F1(F2 (GOODEX[1,1]),
73400 F3(GOODEX[1,2]))=C1) THEN
73500 FOR NEW T5←1 TO LENGTH(ORD[5]) DO BEGIN
73600 F5 ← ORD[5,T5];
73700 IF GREATERP(MSGLEVEL,4) THEN PRINT<5,'T5,T5,'F5,F5>;
73800 IF FOR NEW X←2 TO NEX+1; AND MAT(EXAMPLE[X,1],F5) THEN
73900 FOR NEW T6←1 TO LENGTH(ORD[6]) DO BEGIN
74000 F6 ← ORD[6,T6];
74100 IF GREATERP(MSGLEVEL,5) THEN PRINT <6,'T6,T6,'F6,F6>;
74200 IF FOR NEW X←2 TO NEX+1; AND MAT3(EXAMPLE[X,1],F6) THEN
74300 FOR NEW T4← 1 TO LENGTH(ORD[4]) DO BEGIN
74400 F4←ORD[4,T4];
74500 IF GREATERP(MSGLEVEL,6) THEN PRINT <4,'T4,T4,'F4,F4>;
74600 IF FOR NEW X←2 TO NEX+1; AND
74700 MAT2(EXAMPLE[X,1],F4,F5,F6) AND
74800 (LENGTH(ORD[4])=1 OR C2=NIL OR C2=UNKNOWN
74900 OR F4(F5(L),F6(M))=C2) THEN
75000 FOR NEW T8←1 TO LENGTH(ORD[8]) DO BEGIN
75100 F7←ORD[7,T7];
75200 IF(GREATERP(MSGLEVEL,6)) THEN PRINT <7,'T7,T7,'F7,F7>;
75300 IF FOR NEW X←2 TO NEX+1; AND MAT(EXAMPLE[X,1],F7) THEN
75400 FOR NEW T9←1 TO LENGTH(ORD[9]) DO BEGIN
75500 F9 ← ORD[9,T9];
75600 IF GREATERP(MSGLEVEL,7) THEN PRINT <9,'T9,T9,'F9,F9>;
75700 IF FOR NEW X←2 TO NEX+1; AND MAT3(EXAMPLE[X,1],F9) THEN
75800 FOR NEW T7←1 TO LENGTH(ORD[7]) DO BEGIN
75900 F7←ORD[7,T7];
76000 IF GREATERP(MSGLEVEL,8) THEN PRINT <7,'T7,T7,'F7,F7 >;
76100 IF FOR NEW X←2 TO NEX+1; AND
76200 MAT2(EXAMPLE[X,1],F7,F8,F9) AND
76300 (TAGF7 OR GOODEX2=NIL OR
76400 F7(F8(GOODEX2[1,1]),F9(GOODEX2[1,2]))=C3) THEN
76500 FOR NEW T11←1 TO LENGTH(ORD[11]) DO BEGIN
76600 F11←ORD[11,T11];
76700 IF GREATERP(MSGLEVEL,9) THEN PRINT <11,'T11,T11,'F11,F11>;
76800 IF FOR NEW X←2 TO NEX+1; AND MAT(EXAMPLE[X,1],F11) THEN
76900 FOR NEW T12←1 TO LENGTH(ORD[12]) DO BEGIN
77000 F12←ORD[12,T12];
77100 IF GREATERP(MSGLEVEL,10) THEN PRINT <12,'T12,T12,'F12,F12>;
77200 IF FOR NEW X←2 TO NEX+1; AND MAT3(EXAMPLE[X,1],F12) THEN
77300 FOR NEW T10←1 TO LENGTH(ORD[10]) DO BEGIN
77400 F10←ORD[10,T10];
77500 IF GREATERP(MSGLEVEL,11) THEN PRINT <12,'T12,T12,'F12,F12>;
77600 IF FOR NEW X←2 TO NEX+1; AND MAT2(EXAMPLE[X,1],F10,F11,F12) THEN
77700 FOR NEW T15← 1 TO LENGTH(ORD[15]) DO BEGIN
77800 F15← ORD[15,T15];
77900 IF GREATERP(MSGLEVEL,12) THEN PRINT <15,'T15,T15,'F15,F15>;
78000 IF FOR NEW X←2 TO NEX+1; AND MAT(EXAMPLE[X,1],F15) THEN
78100 FOR NEW F16←1 TO LENGTH(ORD[16]) DO BEGIN
78200 F16←ORD[16,T16];
78300 IF GREATERP(MSGLEVEL,13) THEN PRINT <16,'T16,T16,'F16,F16>;
78400 IF FOR NEW X←2 TO NEX+1; AND MAT3(EXAMPLE[X,1],F16) THEN
78500 FOR NEW T14←1 TO LENGTH(ORD[14]) DO BEGIN
78600 F14←ORD[14,T14];
78700 IF GREATERP(MSGLEVEL,14) THEN PRINT <14,'T14,T14,'F14,F14>;
78800 IF FOR NEW X←2 TO NEX+1; AND MAT2(EXAMPLE[X,1],F14,F15,F16) THEN
78900 FOR NEW T18←1 TO LENGTH(ORD[18]) DO BEGIN
79000 F18←ORD[18,T18];
79100 IF GREATERP(MSGLEVEL,15) THEN PRINT <18,'T18,T18,'F18,F18>;
79200 IF FOR NEW X←2 TO NEX+1; AND MAT(EXAMPLE[X,1],F18) THEN
79300 FOR NEW T19←1 TO LENGTH(ORD[19]) DO BEGIN
79400 F19←ORD[19,T19];
79500 IF GREATERP(MSGLEVEL,16) THEN PRINT <19,'T19,T19,'F19,F19>;
79600 IF FOR NEW X←2 TO NEX+1; AND MAT3(EXAMPLE[X,1],F19) THEN
79700 FOR NEW T17←1 TO LENGTH(ORD[17]) DO BEGIN
79800 F17←ORD[17,T17];
79900 IF GREATERP(MSGLEVEL,17) THEN PRINT <17,'T17,T17,'F17,F17>;
80000 IF FOR NEW X←2 TO NEX+1; AND MAT2(EXAMPLE[X,1],F17,F18,F19) THEN
80100 FOR NEW T13←1 TO LENGTH (ORD[13]) DO BEGIN
80200 F13←ORD[13,T13];
80300 IF GREATERP(MSGLEVEL,18) THEN PRINT <13,'T13,T13,'F13,F13>;
81700 END UNTIL I
81800 END UNTIL I
81900 END UNTIL I
82000 END UNTIL I
82100 END UNTIL I
82200 END UNTIL I
82300 END UNTIL I
82400 END UNTIL I
82500 END UNTIL I
82600 END UNTIL I
82700 END UNTIL I
82800 END UNTIL I
82900 END UNTIL I
83000 END UNTIL I
83100 END UNTIL I
83200 END UNTIL I
83300 END UNTIL I
83400 END UNTIL I
83500 END UNTIL I;
83600 IF GREATERP(MSGLEVEL,0) THEN
83700 PRINT <'F1TOF19,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,
83800 F11,F12,F13,F14,F15,F16,F17,F18,F19,'C1234,C1,C2,
83900 C3,C4>;
84000 KNOWNF ← FN2 CONS KNOWNF;
84100 TARG ← GET('FN,'TARGS) CONS TARG;
84200 NARG← N CONS NARG;
84300 TRE ← GET('FN,'TRES) CONS TRE;
84400 BA2 ← FN2 CONS BA2;
84500 IF GREATERP(MSGLEVEL,35) THEN PRINT <'KNOWNF,KNOWNF,
84600 'RELATESDF,RELATEDF,'TARG,TARG,'NARG,NARG,'TRE,
84700 TRE,'BA2,BA2>;
84800 PUTPROP(FN2,2,NARGS);
84900 PUTPROP(FN2,IHOLD,TARGS);
85000 PUTPROP(FN2,'ANY,TRES);
85100 FINALIZE2();
85200 FOR NEW J←1 TO 19 DO PUTPROP(FN2,11,P2F[J]);
85300 RETURN FN2;
85400 END;
85500 EXPR PRIM2();
85600 BEGIN NEW I;
85700 GOODEX ← NIL;
85800 GOODEX2 ← NIL;
85900 ONEX ← 0;
86000 F1 ← NIL
86100 F12 ← NIL
86200 F3 ← NIL
86300 F2 ← NIL;
86400 F4 ← NIL;
86500 F5 ← NIL;
86600 F6 ← NIL;
86700 F7 ← NIL;
86800 F8 ← NIL;
86900 F9←NIL;
87000 F10 ← NIL;
87100 F11 ← NIL;
87200 PRINTSTR '"THERE IS SOME PRIMITIVE CASE (OR TWO).
87300 DO YOU KNOW ANYTHING ABOUT IT? Y OR N...";
87400 I← READ();
87500 IF I='N THEN BEGIN
87600 IF GREATERP(MSGLEVEL,3) THEN PRINTSTR
87700 '"I AM ASSUMING F1 THROUGH F12 TO BE NIL,
87800 C1 AND C3 TO BE T, C2 AND C4 TO BE UNKNOWN";
87900 C1 ←T;
88000 C3← T;
88100 C2← UNKNOWN;
88200 C4 ← UNKNOWN;
88300 EXAMPLE[1] ←<C1,C2>;
88400 RETURN NIL;
88500 END ALSO RETURN NIL;
88600 PRINTSTR '"FOR SOME FUNCTIONS F1,F2,F3,F4,F5,F6,
88700 AND SOME CONSTANT C1, WHEN
88800 F1( F2(ARG1), F3(ARG2) ) = C1 THEN
88900 THE VALUE OF YOUR FUNCTION IS
89000 F4( F5(ARG1), F6(ARG2) ) = C2
89100
89200 NOW TYPE IN NIL OR A FUNCTION NAME FOR F1,F2,F3,F4,F5,F6:";
89300 F1←READ();
89400 F2←READ();
89500 F3←READ();
89600 F4←READ();
89700 F5←READ();
89800 F6←READ();
89900 PRINTSTR '"NOW TYPE IN A CONSTANT OR THE VALUE UNKNOWN FOR C1";
90000 C1←READ();
90100 PRINTSTR '"IF C2 IS A CONSTANT, TYPE IN ITS VALUE. IF IT
90200 IS NOT CONSTANT, OR IF YOU DONT KNOW THE VALUE,TYPE UNKNOWN";
90300 C2←READ();
90400 EXAMPLE[1]←<C1,C2>;
90500 PRINTSTR '"CAN YOU GIVE ME AN EXAMPLE OF THIS
90600 PRIMITIVE CASE? Y OR N...";
90700 I←READ();
90800 IF I='Y THEN I←GETEX(2) ALSO ONEX←1 ALSO GOODEX←EXAMPLE[2];
90900 PRINTSTR '"IS THERE ANOTHER PRIMITICE CASE? Y OR N...";
91000 I←READ();
91100 IF I='N THEN BEGIN
91200 C3←T;
91300 C4←UNKNOWN;
91400 F7←'FALSE2;
91500 F8←'FALSE;
91600 F9←'FALSE;
91700 F10←'FALSE2;
91800 F11←'FALSE;
91900 F12←'FALSE;
92000 END ALSO RETURN NIL;
92100 PRINTSTR '"FOR SOME FUNCTIONS F7,F8,F9,F10,F11,F12,
92200 AND SOME CONSTANT C3, WHEN
92300 F7( F8(ARG1), F9(ARG2) ) = C3 THEN
92400 THE VALUE OF YOUR FUNCTION IS
92500 F10( F11(ARG1), F12(ARG2) ) = C4
92600
92700 NOW TYPE IN NIL OR A FUNCTION NAME FOR F7 THROUGH F12:";
92800 R`F7←READ();
92900 F8←READ();
93000 F9←READ();
93100 F10←READ();
93200 F11←READ();
93300 F12←READ();
93400 PRINTSTR '"NOW TYPE IN UNKNOWN OR A CONSTANT FOR C3,C4:";
93500 C3←READ();
93600 C4←READ();
93700 PRINTSTR '"CAN YOU GIVE ME AN EXAMPLE OF THIS? Y OR N>>>";
93800 I←READ();
93900 IF I='Y THEN I←GETEX(3) ALSO ONEX←2 ALSO GOODEX2←EXAMPLE[3];
94000 RETURN NIL;
94100 END;
94200 EXPR FSUB(I);
94300 IF I=1 THEN F1
94400 ELSE IF I=2 THEN F2
94500 ELSE IF I=3 THEN F3
94600 ELSE IF I=4 THEN F4
94700 ELSE IF I=5 THEN F5
94800 ELSE IF I=6 THEN F6
94900 ELSE IF I=7 THEN F7
95000 ELSE IF I=8 THEN F8
95100 ELSE IF I=9 THEN F9
95200 ELSE IF I=10 THEN F10
95300 ELSE IF I=11 THEN F11
95400 ELSE IF I=12 THEN F12
95500 ELSE IF I=13 THEN F13
95600 ELSE IF I=14 THEN F14
95700 ELSE IF I=15 THEN F15
95800 ELSE IF I=16 THEN F16
95900 ELSE IF I=17 THEN F17
96000 ELSE IF I=18 THEN F18
96100 ELSE IF I=19 THEN F19
96200 ELSE PRINT <'FSUBERROR,'I,I>;
96300 EXPR FINALIZE2();
96400 BEGIN
96500 FOR NEW I←1 TO 19 DO
96600 IF F1='FN2 THEN F1←FN2;
96700 IF F4='FN2 THEN F4←FN2;
96800 IF F7='FN2 THEN F7←FN2;
96900 IF F10='FN2 THEN F10←FN2;
97000 IF F13='FN2 THEN F13←FN2;
97100 IF F14='FN2 THEN F14←FN2;
97200 IF F17='FN2 THEN F17←FN2;
97300 EVAL <'DE, FN2, '(L M),
97400 <'COND, <<'EQUAL, <F1, <F2, 'L>,<F3,'M>>,C1>,
97500 <F4, <F5, 'L>,<F6, 'M>>>,
97600 <<'EQUAL,<F7,<F8,'L>,<F9,'M>>,C3>,
97700 <F10,<F11,'L>,<F12,'M>>>,
97800 <T,<F13,<F14,<F15,'L>,<F16,'M>>,
97900 <F17,<F18,'L>,<F19,'M>>>>>>;
98000 RETURN KEEP();
98100 END;
98200 EXPR FALSE2(A B); NIL;
98300 EXPR GT2(L M); OR(GOODEX AND GOODEX[1,1]=L AND GOODEX[1,2]=M,
98400 GOODEX2 AND GOODEX2[1,1]=L AND GOODEX2[1,2]=M);
98500 EXPR MAT(E F);
98600 GT2(CAR(E),CADR(E)) OR
98700 EVAL '((CAR (GET F TARGS)) (CAR E));
98800 EXPR MAT2(E F G1 G2);
98900 GT2(CAR(E),CADR(E)) OR
99000 EVAL '((CAR (GET F TARGS)) (G1 (CAR E))) AND
99100 EVAL '((CADR (GET F TARGS)) (G2 (CADR E));
99200 EXPR FALSE2(A B); NIL;
99300 EXPR MAT3(E F);
99400 GT2(CAR(E),CADR(E)) OR
99500 EVAL '((CAR (GET F TARGS)) (CADR E));
99600 END.